From 25f5da5018e80c835d47be791e5132661808c5bc Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Tue, 3 Jun 2014 15:04:25 +0200 Subject: [PATCH] widget: Ensure all gestures outside a grab scope are cancelled This code is a product of early stages in the gestures branch, where capturing would have an effect outside grab boundaries. But this isn't really the case, so every gesture outside the grab scope must be reset to avoid keeping stale data. --- gtk/gtkwidget.c | 35 +++++------------------------------ 1 file changed, 5 insertions(+), 30 deletions(-) diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 8b90c3c831..2aa5acc2e0 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -16887,40 +16887,15 @@ event_controller_grab_notify (GtkWidget *widget, gboolean was_grabbed, EventControllerData *data) { - GtkWidget *grab_widget, *toplevel; - GtkPropagationPhase phase; - GtkWindowGroup *group; - GdkDevice *device; - - device = gtk_gesture_get_device (GTK_GESTURE (data->controller)); - phase = gtk_event_controller_get_propagation_phase (data->controller); - - if (!device) - return; - - toplevel = gtk_widget_get_toplevel (widget); - - if (GTK_IS_WINDOW (toplevel)) - group = gtk_window_get_group (GTK_WINDOW (toplevel)); - else - group = gtk_window_get_group (NULL); + GdkDevice *device = NULL; - grab_widget = gtk_window_group_get_current_device_grab (group, device); - - if (!grab_widget) - grab_widget = gtk_window_group_get_current_grab (group); + if (GTK_IS_GESTURE (data->controller)) + device = gtk_gesture_get_device (GTK_GESTURE (data->controller)); - if (!grab_widget || grab_widget == widget) + if (!device || !gtk_widget_device_is_shadowed (widget, device)) return; - if ((phase != GTK_PHASE_CAPTURE && - !gtk_widget_is_ancestor (widget, grab_widget)) || - (phase == GTK_PHASE_CAPTURE && - !gtk_widget_is_ancestor (widget, grab_widget) && - !gtk_widget_is_ancestor (grab_widget, widget))) - { - gtk_event_controller_reset (data->controller); - } + gtk_event_controller_reset (data->controller); } static void -- 2.30.2